using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace DataAccess
{
    public class clsDataAccessHelper : clsSqlDataProvider
    {
        //Fields.
        private String sql;

        //Constructors.
        public clsDataAccessHelper()
        {
        }

        //Properties.
        protected String Sql
        {
            set { this.sql = value; }
            get { return this.sql; }
        }

        //Methods.
        //Thực thi NonQuery (Hàm dùng để Thêm, xóa, sửa). Trả về true: Thành công, false: Ko thành công.
        protected long ExecuteScalar(String sql)
        {
            SqlCommand cmd;
            long So = 0;

            try
            {
                this.KetNoi();
                cmd = new SqlCommand(sql, this.SQLConnection);
                So = Convert.ToInt64(cmd.ExecuteScalar());
                this.DongKetNoi();
                return So; //check = true: Thành công, check = false: Ko thành công.
            }
            catch
            {
                return So;
            }
        }

        protected DataTable ExecuteQuery(String sql)
        {
            DataTable dt;
            SqlDataAdapter da;

            try
            {
                this.KetNoi();
                da = new SqlDataAdapter(sql, this.SQLConnection);
                dt = new DataTable();
                da.Fill(dt);
                this.DongKetNoi();

                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Thực thi NonQuery (Hàm dùng để Thêm, xóa, sửa). Trả về true: Thành công, false: Ko thành công.
        protected bool ExecuteNonQuery(String sql)
        {
            bool check = false;
            SqlCommand cmd;

            try
            {
                this.KetNoi();
                cmd = new SqlCommand(sql, this.SQLConnection);
                check = (cmd.ExecuteNonQuery()) >0 ? true:false;
                this.DongKetNoi();
                return check; //check = true: Thành công, check = false: Ko thành công.
            }
            catch
            {
                return check;
            }
        }

        //Thực thi Reader.
        protected SqlDataReader ExecuteReader(String sql)
        {
            SqlDataReader dr;
            SqlCommand cmd;

            try
            {
                this.KetNoi();
                cmd = new SqlCommand(sql, this.SQLConnection);
                dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                return dr;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
